package com.wargameproject;

import android.widget.LinearLayout;
import android.widget.TableLayout;

import com.wargameproject.map.Map;
import com.wargameproject.map.Map1;
import com.wargameproject.map.Map2;

public abstract class Partie {

	public static TableLayout grille;
	public static LinearLayout lignes[];

	public static Map map;

	public static boolean clickSurUnite = false;
	public static Case caseCliquee;
	public static Case casePrecedente;

	public static Joueur joueur1;
	public static Joueur joueur2;
	public static Joueur joueurCourant;
	public static Joueur joueurGagnant;

	public Partie(int numeroRaceJoueur1, int numeroRaceJoueur2, int carte) {
		if (numeroRaceJoueur1 == 1) {
			joueur1 = new Joueur(1, "Humain");
		} else {
			joueur1 = new Joueur(1, "Orque");
		}
		if (numeroRaceJoueur2 == 1) {
			joueur2 = new Joueur(2, "Humain");
		} else {
			joueur2 = new Joueur(2, "Orque");
		}
		joueurCourant = joueur1;
		joueur1.argent = 300;
		joueur2.argent = 300;
		switch (carte) {
		case 1:
			map = new Map1();
			break;
		case 2:
			map = new Map2();
			break;
		default:
			map = new Map2();
			break;
		}
		// creationMap(carte);
	}

	public Map creationMap(int carte) {
		switch (carte) {
		case 1:
			map = new Map1();
			break;
		case 2:
			map = new Map2();
			break;
		default:
			break;
		}
		return map;
	}
	
	public static boolean finDeTour() {
		for (int i = 0; i < map.nbLignes; i++) {
			for (int j = 0; j < map.nbColonnes; j++) {
				if (map.cases[i][j].presenceUnite() && map.cases[i][j].unite.joueur == joueurCourant) {
					if ((map.cases[i][j].unite.peutBouger || map.cases[i][j].unite.peutAttaquer) && !map.cases[i][j].unite.immobile) {
						return false;
					}
				}
				if(joueurCourant.argent >= 200 && map.cases[i][j].presenceBase() && map.cases[i][j].base.joueur == joueurCourant && !map.cases[i][j].presenceUnite()) {
					return false;
				}
			}
		}
		return true;
	}
	
	public abstract boolean finDePartie();

	public static void changeJoueur() {
		if (joueurCourant == joueur1) {
			joueurCourant = joueur2;
		} else
			joueurCourant = joueur1;
	}

	public static void nouveauTour() {// deplacer -> peutBouger = true +
		// recharger() pour toutes Unites sur la
		// map
		caseCliquee = null;
		casePrecedente = null;
		clickSurUnite = false;
		changeJoueur();
		joueurCourant.gainArgent();
		brouillardDeGuerre();
	}

	public static void brouillardDeGuerreTotal() {
		Case.caseDeplacementPossible = false;
		Case.caseAttaquePossible = false;
		for (int i = 0; i < map.nbLignes; i++) {
			for (int j = 0; j < map.nbColonnes; j++) {
				map.cases[i][j].cliquableDeplacement = false;
				map.cases[i][j].cliquableAttaque = false;
				map.cases[i][j].visible = false;
			}
		}
		WarGameProjectActivity.boutonArgent.setText("Argent : " + Partie.joueurCourant.argent);
	}

	public static void brouillardDeGuerre() {
		brouillardDeGuerreTotal();
		clickSurUnite = false;
		for (int i = 0; i < map.nbLignes; i++) {
			for (int j = 0; j < map.nbColonnes; j++) {
				if (map.cases[i][j].presenceUnite()
						&& map.cases[i][j].unite.joueur == joueurCourant) {
					map.cases[i][j].visible = true;
					map.cases[i][j].unite.brouillardDeGuerre();
				}

				if (map.cases[i][j].presenceBase()) {
					if (map.cases[i][j].base.joueur == joueurCourant) {
						map.cases[i][j].visible = true;
						map.cases[i][j].base.brouillardDeGuerre();
					}
				}
			}
		}
		grille.invalidate();
	}

	public abstract void actionsAutomatiques();
	
	public abstract void placementElementPartie();
}
